วิธีแก้ปัญหาในกรณีที่ลืมรหัสเข้าใช้งาน PostgreSQL ที่ติดตั้งใน Amazon Linux 2
POP จากบริษัท Classmethod (Thailand) ครับ
ครั้งนี้ผมจะมาแนะนำวิธีแก้ปัญหาในกรณีที่ลืมรหัสเข้าใช้งาน PostgreSQL ที่ติดตั้งใน Amazon Linux 2
ปัญหา
ในขณะที่เรากำลังใช้งาน PostgreSQL แล้วลืมรหัสเข้าใช้งาน ก็จะทำให้ไม่สามารถเข้าไปยัง PostgreSQL เพื่อจัดการข้อมูลต่างๆในนั้นได้ ซึ่งจะเหมือนกับปัญหาด้านล่างนี้
Login เข้าใช้งาน PostgreSQL
psql -h localhost -U postgres
Output (example)
เมื่อใส่รหัสผิดก็จะแสดงข้อความแบบนี้
TERMINAL (PuTTY)
[ec2-user@ip-172-31-29-138 ~]$ psql -h localhost -U postgres
Password for user postgres:
psql: FATAL: password authentication failed for user "postgres"
[ec2-user@ip-172-31-29-138 ~]$
วิธีแก้ปัญหา
เข้าใช้งาน root
ก่อนอื่นเราต้องเข้าใช้งานสิทธิ์ root
sudo su -
Reset Password
เข้าไปตั้งค่าที่ไฟล์ pg_hba.conf
vi /var/lib/pgsql/data/pg_hba.conf
Output (example)
เปลี่ยน METHOD ของ local ให้เป็น trust เหมือนกับตัวอย่างด้านล่างนี้
TERMINAL (PuTTY)
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
Restart PostgreSQL
systemctl restart postgresql
ทดสอบ Login postgres โดยไม่ใช้รหัสผ่าน
เมื่อ Restart แล้ว ก็จะเป็น user postgres ที่สามารถเข้าใช้งานได้โดยไม่ต้องใช้รหัสผ่าน
su - postgres
Output (example)
TERMINAL (PuTTY)
[root@ip-172-31-29-138 ~]# su - postgres
Last login: Mon Sep 5 07:45:01 UTC 2022 on pts/0
-bash-4.2$
พิมพ์ psql ลงไป (เราจะไม่ Login ผ่าน -h)
psql
Output (example)
จะเห็นว่าเราสามารถเข้าใช้งานได้โดยไม่ต้องใช้รหัสผ่าน
TERMINAL (PuTTY)
-bash-4.2$ psql
psql (10.17)
Type "help" for help.
postgres=#
เปลี่ยน Password
เปลี่ยนรหัสผ่านใหม่ (เปลี่ยน********
ให้เป็นรหัสของคุณ)
・postgres = Username
・password = รหัสผ่านใหม่ของเรา
alter role postgres with password '********';
Output (example)
Password:P@ssW0rd2
นี้เป็นแค่ตัวอย่าง
TERMINAL (PuTTY)
postgres=# alter role postgres with password 'P@ssW0rd2';
ALTER ROLE
postgres=#
ออกจาก psql
\q
Output (example)
TERMINAL (PuTTY)
postgres=# \q
-bash-4.2$
กลับมาที่ root
exit
Output (example)
TERMINAL (PuTTY)
-bash-4.2$ exit
logout
[root@ip-172-31-29-138 ~]#
เข้าไปตั้งค่าที่ไฟล์ pg_hba.conf อีกครั้ง
vi /var/lib/pgsql/data/pg_hba.conf
Output (example)
เปลี่ยน METHOD ของ local ให้เป็น md5 เหมือนกับตัวอย่างด้านล่างนี้
TERMINAL (PuTTY)
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
Restart PostgreSQL
systemctl restart postgresql
เมื่อ Restart แล้ว ก็จะเป็น user postgresql ที่ต้องใช้รหัสผ่าน Login เพื่อเข้าใช้งาน
su - postgres
Output (example)
TERMINAL (PuTTY)
[root@ip-172-31-29-138 ~]# su - postgres
Last login: Tue Sep 6 04:57:46 UTC 2022 on pts/0
-bash-4.2$
ทดสอบ Login postgresql โดยใช้รหัสผ่าน
ตรวจสอบให้แน่ใจว่าเราสามารถ Login ด้วยรหัสผ่านได้โดยใช้ psql
psql
Output (example)
ใส่รหัสผ่านใหม่ที่สร้างเมื่อสักครู่นี้ของเรา
TERMINAL (PuTTY)
-bash-4.2$ psql
Password:
Output (example)
ก็จะสามารถ Login เข้าใช้งานด้วยรหัสผ่านใหม่ได้แล้ว
TERMINAL (PuTTY)
Password:
psql (10.17)
Type "help" for help.
postgres=#
ทีนี้ให้ออกจาก postgresql กลับมาที่ root โดยรันคำสั่งนี้
\q exit
ทดสอบ Login postgresql ผ่าน -h โดยใช้รหัสผ่าน
ผมจะทดสอบ Login postgresql ผ่าน -h อีกครั้ง
psql -h localhost -U postgres
Output (example)
จะเห็นว่าผมสามารถเปลี่ยนรหัสผ่านและ Login ผ่าน -h โดยใช้รหัสผ่านใหม่ได้แล้ว
TERMINAL (PuTTY)
[root@ip-172-31-29-138 ~]# psql -h localhost -U postgres
Password for user postgres:
psql (10.17)
Type "help" for help.
postgres=#
สรุป
ในขณะที่เราใช้งาน PostgreSQL อยู่นั้น บางครั้งเราอาจลืมรหัสผ่านได้ ดังนั้นผมจึงใช้โอกาสนี้มาแนะนำวิธีการเปลี่ยนรหัสผ่านให้กับผู้อ่านที่เกิดเหตุการณ์แบบนี้ครับ
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP จากบริษัท Classmethod (Thailand) ครับ !